/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package paquetePrueba;

/**
 *
 * @author Tavo
 */

import java.util.*;
import javax.faces.model.SelectItem;
public class ControlPreguntas
{



    private String idPregunta;
    private String pregunta;
    private List respuestas;
    private List<SelectItem> opcionesRespuestas;
    private String tipoPregunta;
    private List<String> listaItemsSeleccionados;
    private boolean acierto;

    private List<Integer> preguntasHechas;

    ContolBd obj;

   private List<ProcesoPregunta> listaPreguntas;

   private boolean hayMasPreguntas=true;

    public boolean isHayMasPreguntas() {
        return hayMasPreguntas;
    }

    public void setHayMasPreguntas(boolean hayMasPreguntas) {
        this.hayMasPreguntas = hayMasPreguntas;
    }

   





    public ControlPreguntas()
    {

      obj=new ContolBd();
     //obtener lista de preguntas
     listaPreguntas=new ArrayList<ProcesoPregunta>();
     listaPreguntas=obj.getBean();

     //inicializar lista de preguntas realizadas
     preguntasHechas=new ArrayList<Integer>();

     respuestas=new ArrayList();
     opcionesRespuestas=new ArrayList<SelectItem>();
     listaItemsSeleccionados=new ArrayList<String>();

     


    }

    public void nuevaPregunta()
    {
        if(preguntasHechas.size()!= listaPreguntas.size())
        {
            //obtener index aleatorio de lista de preguntas
            int indexPregunta=getNumeroAleatorio(listaPreguntas.size());

            //si la pregunta NO se ha hecho enviamos pregunta
            if(preguntasHechas.indexOf(indexPregunta)==-1)
            {
            ObtenerPregunta(indexPregunta);
            }
            //si la pregunta ya fue hecha buscamos otra pregunta
            else
            {
                nuevaPregunta();
            }
        }
        else
        {
            this.hayMasPreguntas=false;
            opcionesRespuestas.clear();
            respuestas.clear();
        }
    }

    //obtener pregunta de la lista de preguntas
    public void ObtenerPregunta(int index)
    {
        if(!preguntasHechas.isEmpty())
        {
         //evaluaraPregunta();
         respuestas.clear();
         opcionesRespuestas.clear();
        }

        //id pregunta
        idPregunta=listaPreguntas.get(index).getIdPregunta();

        //tipo de pregunta
        tipoPregunta=listaPreguntas.get(index).getTipoPregunta();

        //pregunta
        pregunta=listaPreguntas.get(index).getPregunta();

        //respuestas de pregunta
        HashMap mapRes=listaPreguntas.get(index).getRespuestas();
        for( Iterator it = mapRes.keySet().iterator(); it.hasNext();)
        {
            String id = (String)it.next();
            String val = (String)mapRes.get(id);
            respuestas.add(id);
            opcionesRespuestas.add(new SelectItem(id,val));
	}

        //respuestas opcionales
        HashMap mapOpRes=listaPreguntas.get(index).getOpcionesRespuestas();
        for( Iterator it = mapOpRes.keySet().iterator(); it.hasNext();)
        {
            String id = (String)it.next();
            String val = (String)mapOpRes.get(id);
            opcionesRespuestas.add(new SelectItem(id,val));

	}

        //llama al metodo para reacomodar los elementos aleatoriamente
        RespuestasAleatorias();

        //insertar indice de la pregunta hecha en la lista
        preguntasHechas.add(index);

    }


    public void RespuestasAleatorias()
    {
        int ciclo=0;
        while(ciclo!=2)
        {
        int aleatorio1=getNumeroAleatorio(opcionesRespuestas.size());
        SelectItem aux=(SelectItem)opcionesRespuestas.get(aleatorio1);

        int aleatorio2=getNumeroAleatorio(opcionesRespuestas.size());

        opcionesRespuestas.set(aleatorio1,opcionesRespuestas.get(aleatorio2));

        opcionesRespuestas.set(aleatorio2, aux);
        ciclo++;
        }

    }

    //genera niumero aleatorio
    public int getNumeroAleatorio(int rango)
    {
        Random aleatorio=new Random();
        return aleatorio.nextInt(rango);
    }
   public boolean isAcierto() {
        return acierto;
    }

    public void setAcierto(boolean acierto) {
        this.acierto = acierto;
    }

    public String getIdPregunta() {
        return idPregunta;
    }

    public void setIdPregunta(String idPregunta) {
        this.idPregunta = idPregunta;
    }

    public List<String> getListaItemsSeleccionados() {
        return listaItemsSeleccionados;
    }

    public void setListaItemsSeleccionados(List<String> listaItemsSeleccionados) {
        this.listaItemsSeleccionados = listaItemsSeleccionados;
    }

    public List<SelectItem> getOpcionesRespuestas() {
        return opcionesRespuestas;
    }

    public void setOpcionesRespuestas(List<SelectItem> opcionesRespuestas) {
        this.opcionesRespuestas = opcionesRespuestas;
    }

    public String getPregunta() {
        return pregunta;
    }

    public void setPregunta(String pregunta) {
        this.pregunta = pregunta;
    }

    public List<Integer> getPreguntasHechas() {
        return preguntasHechas;
    }

    public void setPreguntasHechas(List<Integer> preguntasHechas) {
        this.preguntasHechas = preguntasHechas;
    }

    public List getRespuestas() {
        return respuestas;
    }

    public void setRespuestas(List respuestas) {
        this.respuestas = respuestas;
    }

    public String getTipoPregunta() {
        return tipoPregunta;
    }

    public void setTipoPregunta(String tipoPregunta) {
        this.tipoPregunta = tipoPregunta;
    }
 

}
